package org.aeon.dao

/**
 * @author:     MissingAeon
 * @date:       2024/1/18 17:23
 * @description:
 */
interface BasicDao<K, T> {
    /**
     * 插入一条数据
     * @param t
     */
    fun insert(t: T): Boolean

    /**
     * 修改一条数据
     * @param t
     */
    fun modify(t: T): Boolean

    /**
     * 删除一条数据
     * @param id
     */
    fun remove(t: T): Boolean

    /**
     * 根据条件返回满足的数据
     * @param func 条件函数
     */
    fun query(func: (T) -> Boolean): List<T>

    /**
     * 根据主键返回满足的数据
     * @param k 主键
     * @return 如果查询失败 null
     */
    fun queryById(k: K): T?

    /**
     * 根据主键返回是否存在
     * @param k 主键
     * @return 如果查询失败 false
     */
    fun exist(k: K): Boolean

    /**
     * @return 返回总记录条数
     */
    fun count(): Int
}
